Test Spy
参考
関数の呼び出しを記録するobject
呼び出された回数、実行時の引数などを記録する
テスト対象からの「出力」を確認するために使う
ただ何かを記録するだけで、偽の実装を代わりに使う、とかはしない
GPT-4.icon
code:ts
import { mocked } from 'ts-jest/utils';
// テスト対象の関数。内部で他の関数を呼び出しています。
function myFunction(): void {
console.log("Hello, world!");
}
// Jestのテストスイート
test('myFunction calls console.log', () => {
// console.logの呼び出しをスパイ
const spy = jest.spyOn(console, 'log');
// console.logの呼び出しをモック(このテスト中では実際のconsole.logは呼ばれない)
spy.mockImplementation(jest.fn());
myFunction();
// console.logが正しく呼ばれたかを検証
expect(spy).toHaveBeenCalledWith("Hello, world!");
// スパイを解除
spy.mockRestore();
});
code:ts
// Test Spyとして動作する代替関数
function 外部メソッド(int: input) {
間接出力値 = input;
}
function テスト対象() {
...
外部メソッド(x);
...
}
@Test
function テストコード() {
テスト対象(); // これの結果を直接テストするわけではない
AssertEquals(期待値, 間接出力値);
}
副作用があるコードが前提の話っぽい
これなんでテスト対象を1個挟んでテストしてるんだろう
せめて外部メソッドを実行してSpyしたらいいのに(?)
まあそういうケースもあるか